package com.java.base.exercise.util;

/**
 * @Author RenPu
 * @Date 2024/2/4 17:54
 * @Version 1.0
 * @Description: 枚举实现单例模式
 *               枚举为什么是天然线程安全得：1：枚举类型的构造函数是私有的
 *                                      2：。枚举类型在首次使用时会隐式地调用Enum.valueOf()方法，该方法会返回一个已经存在的实例或者创建一个新的实例。
 *                                      由于这个过程是在枚举类型的加载阶段完成的，因此在多线程环境下只有一个线程能够执行这个过程
 *                                      3：枚举类型是实例化的类，每个枚举常量都是该类的一个实例。由于枚举常量是在类加载时创建的，因此它们的创建顺序与它们在代码中的声明顺序一致，这也保证了线程安全。
 *                                      4：Java中的枚举类是线程安全的，主要是因为它们使用了双重检查锁定技术、构造函数是私有的以及每个枚举常量都是该类的一个实例
 **/
public enum Single {
    SINGLE;
    private Single single;
    Single() {
        this.single = single;
    }

    public  Single someMethod() {
        return single;
    }

    public static void main(String[] args) {
        Single single = Single.SINGLE.someMethod();

        System.out.println(single);
    }

}
